package com.crm.system.service.orderManager;

import com.alibaba.fastjson.JSONObject;
import com.crm.common.model.DhPageInfo;
import com.crm.model.entity.customerManager.CustomerOrderBackMoney;
import com.crm.model.entity.customerManager.CustomerOrderBackMoneyExamine;
import com.crm.model.entity.finishOrderProduct.FinishOrderProduct;
import com.crm.model.entity.orderManager.CustomerProductOrderDetail;
import com.crm.model.qo.customerManager.BackMoneyQO;
import com.crm.model.qo.customerManager.OrderBackMoneyQO;
import com.crm.model.qo.orderManager.CustomerProductOrderAddQO;
import com.crm.model.qo.orderManager.CustomerProductOrderQO;
import com.crm.model.qo.orderManager.FinanceProductOrderQO;
import com.crm.model.vo.customerManager.CustomerOrderBackMoneyVO;
import com.crm.model.vo.datasearch.DataSearchResultVO;
import com.crm.model.vo.orderManager.*;
import com.crm.model.vo.returnMoney.FinanceProductOderInfoVO;
import com.crm.model.vo.sendRoyaltyManager.SendRoyaltyProductVO;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ Author ：pym
 * @ Date   ：2021/3/12 10:39
 */
public interface CustomerProductOrderService {
    /**
     * 用户模块-订单管理-订单列表
     * @Author pym
     * @Date  2021/3/12 10:53
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param customerProductOrderQO -查询条件
     * @param sortName -排序列名字
     * @param sortOrder -排序规则(asc/desc)
     * @param jumpType -0：管理模块-订单管理-订单列表（超级管理员）；1：管理模块-订单管理-订单列表（普通管理员）；2：用户模块-订单管理-订单列表
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.vo.orderManager.CustomerProductOrderVO>}}
     */
    DhPageInfo<CustomerProductOrderVO> selectCustomerProductOrderVOList(Integer pageIndex, Integer pageSize,
                                                                        CustomerProductOrderQO customerProductOrderQO,
                                                                        String sortName, String sortOrder, String jumpType);

    /**
     * 订单详情基本信息
     * @Author pym
     * @Date  2021/3/17 11:12
     * @param productOrderId
     * @return {@link {com.crm.model.vo.orderManager.OrderDetailVO}}
     */
    OrderDetailVO selectOrderDetailVO(String productOrderId);

    /**
     * 订单管理-订单列表-订单详情-产品详情、活动产品列表
     * @Author pym
     * @Date  2021/3/17 10:22
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param productOrderId -产品订单表主键
     * @param productOrderDetailType -订单明细类型--1:产品类型;2:活动类型;3:赠品活动类型
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.entity.orderManager.CustomerProductOrderDetail>}}
     */
    DhPageInfo<CustomerProductOrderDetail> selectCustomerProductOrderDetailList(Integer pageIndex, Integer pageSize,String productOrderId,String productOrderDetailType);

    /**
     * 财务-订单列表
     * @Author chaifuyou
     * @Date  2021/3/19 10:20
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param sortName -排序列名字
     * @param sortOrder -排序规则(asc/desc)
     * @param financeProductOrderQO -查询条件
     * @return {@link {com.crm.common.model.DataResponse}}
     */
    DhPageInfo<FinanceProductOrderVO> selectFinanceOrderVOList(Integer pageIndex, Integer pageSize, FinanceProductOrderQO financeProductOrderQO, String sortName, String sortOrder, String jumpType);

    /**
     * 财务-订单详情
     * @param productOrderId
     * @return
     */
    FinanceProductOderInfoVO financeProductOderInfo(String productOrderId,Integer status);


    /**
     * 订单管理-订单列表-订单详情-活动产品列表-活动下的产品
     * @Author pym
     * @Date  2021/3/26 9:56
     * @param productOrderId -订单ID
     * @param orderRelationId -活动产品ID
     * @return {@link {java.util.List<java.util.HashMap>}}
     */
    List<HashMap> selectOrderActivityRelationProductNames(String productOrderId, String orderRelationId);

    /**
     * 根據訂單id獲取訂單產品和活動信息
     * @param productOrderId
     * @param pageIndex
     * @param pageSize
     * @param sortName
     * @param sortOrder
     * @return
     */
    DhPageInfo<SendRoyaltyProductVO> financeOrderProductAndActivity(String productOrderId, Integer pageIndex, Integer pageSize, String sortName, String sortOrder);

    /**
     * 申请开票页面订单详情
     * @param type
     * @param orderId
     * @param chsCustomerOrderInvoiceId 申请发票id
     * @return
     */
    ApplyInvoiceOrderInfoVO getApplyInvoiceOrderInfo(String type, String orderId,String chsCustomerOrderInvoiceId);

    /***
     * @Description:会员非会员总额度统计
     * @Param:yearMark 查询月份(传12是今年，传24是去年)
     * @Author: luojie
     * @Date: 2021/4/27 22:26
     */
    JSONObject selectAnnualAmount(Integer yearMark,String accountId);

    /***
     * @Description:查询本月业绩饼图
     * @Author: luojie
     * @Date: 2021/4/27 22:46
     */
    JSONObject selectThisMonthPerformance(String accountId);

    /***
     * @Description:查询业绩排名
     * @Author: luojie
     * @Date: 2021/4/29 9:23
     */
    List<PerformanceRankVO> selectPerformanceRank();

    /***
     * @Description:根据个人id和时间范围统计合同信息
     * @Param: accountId 用户id
     * @Param: timeTag 时间标识
     * @Author: luojie
     * @Date: 2021/4/29 13:53
     */
    JSONObject selectStatisticsContractInformation(String dateType,String accountId);


    /**
     * @Description: 通过订单编号获取数据
     * @Param: [orderNum]
     * @Return: java.util.List<com.crm.model.vo.datasearch.DataSearchResultVO>
     * @Author: lixq-f
     * @Date: 2021/5/13
     **/
    List<DataSearchResultVO> selectDataByOrderNum(String orderNum);

    /**
     * 申请退款(业务员端)
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    String orderRefund(CustomerOrderBackMoney customerOrderBackMoney);

    /**
     * 客户-退款列表
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    DhPageInfo<CustomerOrderBackMoneyVO> customerOrderBackMoneyList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, OrderBackMoneyQO orderBackMoneyQO);

    /**
     *财务-退款详情
     * @param orderBackMoneyId 退款id
     * @param productOrderId 订单id
     * @return
     */
    Map<String, Object> customerOrderBackMoneyDetail(String orderBackMoneyId, String productOrderId);

    /**
     * 退款(财务端)
     * @Author bj
     * @Date  2021/7/27 9:27
     * @param backMoneyQO -退款产品信息
     */
    String orderRefundFinance(BackMoneyQO backMoneyQO);

    /**
     * 销总审核退款(财务端)
     * @Author bj
     * @Date  2021/7/27 9:27
     * @param backMoneyQO -退款产品信息
     */
    Boolean xzOrderRefundFinance(BackMoneyQO backMoneyQO);
    /**
     * 退码
     * @param orderId
     * @param finishOrderProductNum
     * @return
     */
    Integer backProduct(String orderId, String finishOrderProductNum);

    /**
     * 根据订单编号查询订单
     * @param productOrderNumber
     */
    CustomerProductOrderVO selectCustomerProductOrderByNumber(String productOrderNumber);

    /**
     * 订单详情-退款信息
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    DhPageInfo<CustomerOrderBackMoneyVO> orderBackMoneyList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String productOrderId);

    /**
     * 线上订单同步
     * @Author pym
     * @Date  2021/7/29 16:59
     * @param customerProductOrderAddQO 订单信息
     * @return {@link {java.lang.Boolean}}
     */
    Map<String,String> addOnlineOrder(CustomerProductOrderAddQO customerProductOrderAddQO) throws Exception;

    /**
     * 通过订单id查询订单信息
     * @param orderId 订单id
     * @return
     */
    CustomerProductOrderVO getOrderInfoById(String orderId);

    /**
     * 用户端-已完成订单退款产品列表
     * @param pageIndex 页码
     * @param pageSize 条数
     * @param sortName 分组名称
     * @param sortOrder 分组类型
     * @param orderId 订单id
     * @return
     */
    DhPageInfo<FinishOrderProduct> finishOrderBackProductList(Integer pageIndex, Integer pageSize, String sortName, String sortOrder, String orderId);

    /**
     * 计算订单产品明细的价格
     * @param orderId 订单id
     * @return
     */
    BigDecimal orderProductDetailNumMoney(String orderId);

    /**
     * 财务首页订单数量统计
     * @return
     */
    FinanceIndexOrderInfoVO financeIndexOrderInfo(String companyId);

    /**
     * 财务首页各种订单金额统计
     * @return
     */
    FinanceIndexOrderInfoListVO financeIndexOrderInfoList(String dateType,String companyId);

    /**
     * 财务首页-订单产品列表
     * @param dateType
     * @param pageIndex
     * @param pageSize
     * @return
     */
    DhPageInfo<FinanceIndexOrderProductVO> financeIndexOrderProductList(String dateType,String companyId, Integer pageIndex, Integer pageSize);

    /**
     * 订单管理-订单列表-订单详情-产品详情
     * @Author pym
     * @Date  2021/9/6 14:39
     * @param pageIndex -页码
     * @param pageSize -分页大小
     * @param productOrderId -产品订单表主键
     * @param productOrderDetailType -订单明细类型--1:产品类型;2:活动类型;3:赠品活动类型;4:兑换类型;5:补款升级
     * @return {@link {com.crm.common.model.DhPageInfo<com.crm.model.entity.finishOrderProduct.FinishOrderProduct>}}
     */
    DhPageInfo<FinishOrderProduct> selectOrderDetailFinishOrderProductList(Integer pageIndex, Integer pageSize,String productOrderId,String productOrderDetailType);

    void orderToReturnMoney();

    /**
     * 财务-销总-退款详情
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    Map<String, Object> xzCustomerOrderBackMoneyDetail(String orderBackMoneyId, String productOrderId);

    /**
     * 通过退款id查询退款
     * @param orderBackMoneyId 退款id
     * @return
     */
    CustomerOrderBackMoney getCustomerOrderMoneyDetail(String orderBackMoneyId);

    /**
     * 余额申请退款(业务员端)
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    String balanceRefund(CustomerOrderBackMoney customerOrderBackMoney);

    /**
     * 通过退款id查询退款审核表
     * @param orderBackMoneyId 退款id
     * @return
     */
    CustomerOrderBackMoneyExamine selectOrderBackMoneyExamine(String orderBackMoneyId);

    /**
     * 财务-退余额款详情
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    Map<String, Object> balanceBackMoneyDetail(String orderBackMoneyId);

    /**
     * 财务-销总-余额退款详情
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    Map<String, Object> xzBalanceBackMoneyDetail(String orderBackMoneyId);

    /**
     * 余额退款(财务端)
     * @Author bj
     * @Date  2021/7/27 9:27
     * @param backMoneyQO -退款产品信息
     */
    String balanceRefundFinance(BackMoneyQO backMoneyQO);

    /**
     * 销总余额审核退款(财务端)
     * @Author bj
     * @Date  2021/7/27 9:27
     * @param backMoneyQO -退款产品信息
     */
    Boolean xzBalanceRefundFinance(BackMoneyQO backMoneyQO);

    /**
     * 补全之前退款的回款记录表
     */
    void repairReturnMoney();

    /**
     * 对比不一样的
     */
    void contrastFinish();

    /**
     * 修改会员卡的起始时间和结束时间
     * @return
     */
    Boolean updateDate(String startTm,String endTm,String memberCardNumber);

    /**
     * 补卡
     * @Author bj
     * @Date  2021/7/27 9:27
     */
    Boolean repairHairpin(String reqParam);

}
